#include "stdio.h"
#include "stdlib.h"
#include "string.h"

// char *strCom = "1D1213AB6FC1718B19202122232425A6";

int StringToHex(char *str, unsigned char *out)
{
    char *p = str;
    char high = 0, low = 0;
    int tmplen = strlen(p), cnt = 0;
    tmplen = strlen(p);
    while(cnt < (tmplen / 2))
    {
        high = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48;
        low = (*(++ p) > '9' && ((*p <= 'F') || (*p <= 'f'))) ? *(p) - 48 - 7 : *(p) - 48;
        out[cnt] = ((high & 0x0f) << 4 | (low & 0x0f));
        p ++;
        cnt ++;
    }
    if(tmplen % 2 != 0) out[cnt] = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48;
    
    return tmplen / 2 + tmplen % 2;
}

// int main(int argc, const char *argv)
// {
//     int cnt;
//     unsigned char out[33];
    
//     int outlen = 0;
//     StringToHex(strCom, out, &outlen);
//     for(cnt = 0; cnt < outlen; cnt ++)
//     {
//         printf("%02X ", out[cnt]);
//     } 
//     putchar(10); 
//     return 0;
// }

// unsigned char unicode_number[22]={0x00,0x31,0x00,0x37,0x00,0x38,0x00,0x31,0x00,0x31,
//                                 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x39,0x00,0x32,0x00,0x37};
// unsigned char consumer_number[100]={0}; 
/***********************************************************************
* 功能：将一个十六进制字节串转换成ASCII码表示的十六进制字符串
* 输入参数：pHex----十六进制数字节串首地址
*                   pAscii---转换后ASCII码表示的十六进制字符串首地址
*                   nLen---要转换的十六进制数长度（字节数）
* 注：转换后的结果全部是大写ASCII码表示的十六进制数
*此部分百度的
************************************************************************/
void HexToAscii(unsigned char *pHex, unsigned char *pAscii, int nLen)
{
    unsigned char Nibble[2];
    unsigned int i,j;
    for (i = 0; i < nLen; i++){
        Nibble[0] = (pHex[i] & 0xF0) >> 4;
        Nibble[1] = pHex[i] & 0x0F;
        for (j = 0; j < 2; j++){
            if (Nibble[j] < 10){            
                Nibble[j] += 0x30;
            }
            else{
                if (Nibble[j] < 16)
                    Nibble[j] = Nibble[j] - 10 + 'A';
            }
            *pAscii++ = Nibble[j];
        }               // for (int j = ...)
    }           // for (int i = ...)
}
// void main(void) 
// {
//     //依旧用串口一进行实验
//     P3M0 = 0X00;
//     P3M1 = 0X00;

//     UART1_config();             //串口初始化
//     uart1_printf("UART1 is good! \r\n");
    
//     HexToAscii(unicode_number, consumer_number, 22);
    
//     uart1_printf(consumer_number);
//     while(1);
// }